package main

import (
	"fmt"
	"ginDemo/config"
	"ginDemo/core"
	"ginDemo/initialize"
	admRoute "ginDemo/route/admin"
	"gitee.ltd/lxh/logger"
	"github.com/gin-gonic/gin"
	"golang.org/x/sync/errgroup"
	"net/http"
	"time"
)

var g errgroup.Group

// 系统初始化
func init() {
	initialize.InitSystem() // 初始化系统配置
}

// 启动入口
func main() {
	// 强制日志颜色化
	gin.ForceConsoleColor()
	// 定义启动入口
	adm := &http.Server{
		Addr:         fmt.Sprintf(":%d", config.Scd.Admin.Port),
		Handler:      admin(),
		ReadTimeout:  5 * time.Second,
		WriteTimeout: 1 * time.Minute,
	}

	// 启动项目
	g.Go(func() error {
		return adm.ListenAndServe()
	})
	if err := g.Wait(); err != nil {
		logger.Say.Panicf("启动失败，错误信息：%s", err.Error())
	}
}

// 生成Admin服务
func admin() http.Handler {
	app := gin.New()
	app.Use(gin.Recovery())
	// 开启自定义请求方式不允许处理函数
	app.HandleMethodNotAllowed = true
	// 处理请求方式不对
	app.NoMethod(core.NoMethodHandler())
	// 404返回数据
	app.NoRoute(core.NoRouteHandler())
	// 初始化路由
	admRoute.InitRoute(app.Group(config.Scd.Admin.Prefix))
	return app
}
